#ifndef OBSERVER_H
#define OBSERVER_H

#include <iostream>
/*
    Observer（抽象的观察者）
    定义观察者的接口，提供主题通知时对应的更新方法，这个更新方法进行相应的业务处理，可
    以在这个方法里面回调主题对象，以获取主题对象的数据。
*/
class Observer{
public:
    virtual void Update(int) = 0;
};

/*
    抽象的主题，即被观察的对象.
    1、一个主题可以被多个观察者观察
    2、提供注册和注销观察者的接口
    3、当主题状态发生变化时，主题负责通知所有注册的、有效的观察者
*/
class Subject{
public:
    // 注册Observer
    virtual void Attach(Observer *) = 0;
    // 删除Observer
    virtual void Detach(Observer *) = 0;
    // 通知所有Observer
    virtual void Notify() = 0;
};



#endif